var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http, {
    allowEIO3:true,
    cors: {
        origin: ["http://192.168.101.45:8080","http://172.17.80.168:8080",'http://localhost:8080'],
        methods: ["GET", "POST"],
        credentials: true
    }
});


/* 接收在线人数，传给前端，保证在线人数是最新的 */
var userList=[{
    userId:1,
    name:'默认群聊',
    avatar:'https://pic1.zhimg.com/50/v2-adfacac8307b48531d4e341a6090aa03_hd.jpg?source=1940ef5c',
    unit_type:"web"
}];
var socketAll = {};
io.on('connection', function (socket) {

    /* 监听用户登录事件,并将数据放到socket实例的属性上 */
    socket.on('login',(data,callback)=>{
        /* 遍历服务器连接*/
        if(typeof(data)!='object'){
            data=JSON.parse(data);
        }

        //检查在线列表，如果不在里面就加入
        var islogin = false;
        for (var i = 0; i < userList.length; i++) {
            if (data['name'] === userList[i].name) {
                islogin = true;
                break;
            }
        }
        if(islogin){
            console.log('用户登录失败！：已经登录过了');
        }
        if(!islogin) userList.push(data);
        socket.userId=data['userId'];

        if(data.unit_type=='web'){
            callback(true);
        }
        io.emit('loginSuccess',JSON.stringify(userList));  // 广播
      
    });

    /* 监听群聊事件 */
    socket.on('groupChat',data=>{
        // 发送给所有客户端，除了发送者
        /* 修改源数据的属性 */
        if(typeof(data)!='object'){
            data=JSON.parse(data);
        }
        data.type='user';
        socket.broadcast.emit('updateChatMessageList',data);
    });


    /* 监听私聊事件 */
    socket.on('privateChat',data=>{
        /* 找到对应的私聊对象 */
        io.sockets.sockets.forEach(iss=>{
            if(iss.userId==data.receiver_userId){
                data.type='user';
                io.to(iss.id).emit('updateChatMessageList',data);
            }
        });
    });

    /* 用户掉线 */
    socket.on('disconnect',()=>{
        /* 删除用户 */
        let index=userList.findIndex(i=>i.name==socket.name);
        if(index!=-1){
            userList.splice(index,1);
            /* 通知前端 */
            io.emit('login',userList);
        }
    });
});

function sendToUserId(UserId,method,data){
    io.sockets.sockets.forEach(iss=>{
        if(iss.UserId==data.UserId){
            io.to(iss.id).emit(method,data);
        }
    });
}


http.listen(3000, function () {
    console.log('listening on *:3000');
});
